﻿(function ($) {
    $.fn.getData = function (itemTag) {
        var obj;
        if (itemTag) {
            obj = [];
            this.find(itemTag).each(function () {
                obj.push($(this).getData());
            });
            return obj;
        }
        else {
            obj = {};
            this.find("input,select").each(function (i) {
                if (this.name) {
                    var type=$(this).prop("type");
                    if (type == "radio") {
                        if ($(this).prop("checked")) {
                            obj[this.name] = $.trim($(this).val());
                        }
                    }
                    else if (type == "checkbox") {
                        obj[this.name] = $(this).prop("checked");
                    }
                    else
                    {
                        obj[this.name] = $.trim($(this).val());
                    }
                }
            });
            return obj;
        }
    };
    $.fn.setData = function (obj) {
        if ($.isPlainObject(obj)) {
            for (var p in obj) {
                var element = $('input[name="' + decodeURIComponent(p) + '"]' + ',select[name="' + decodeURIComponent(p) + '"]');
                if (element.length > 0 && !$.isArray(obj[p])) {
                    if ($.type(obj[p]) == "boolean") {
                        element.prop("checked", obj[p]);
                    }
                    else {
                        element.val(obj[p]);
                    }
                }
            }
        }
    };
})(jQuery);
$.extend({
    toXML: function (obj) {
        var props = [];
        if ($.isPlainObject(obj)) {
            props.push("<root>");
            for (var p in obj) {
                var prop = obj[p];
                props.push("<");
                props.push(p);
                props.push(">");
                if ($.isArray(prop)) {
                    $.each(prop, function (i, v) {
                        props.push($.toXML(v).replace("<root>", "<item>").replace("</root>", "</item>"));
                    });
                }
                else {                   
                    props.push(prop);
                }
                props.push("</");
                props.push(p);
                props.push(">");
            }
            props.push("</root>");
        }
        return props.join("");
    },
    toJSON: function (obj) {
        if ($.isPlainObject(obj)) {
            var props = [];
            for (var p in obj) {
                var prop = obj[p];
                var propStr = '';
                if ($.isArray(prop)) {
                    propStr += '[';
                    var items = [];
                    $.each(prop, function (i, v) {
                        if ($.type(v) == "number" || $.type(v) == "string") {
                            items.push('"' + v + '"');
                        }
                        else {
                            items.push($.toJSON(v));
                        }
                    });
                    propStr += items.join(',') + ']';
                }
                else {
                    propStr += '"' + prop + '"';
                }
                props.push('"' + p + '":' + propStr);
            }
        }
        return '{' + props.join(',') + '}';
    }
});

